home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / win / vb / inpgrid.exe / API.C < prev    next >
Encoding:
C/C++ Source or Header  |  1992-11-06  |  21.7 KB  |  649 lines

  1. //--------------------------------------------------------------------------
  2. // Api.c
  3. //---------------------------------------------------------------------------
  4. // Griglia Control
  5. //---------------------------------------------------------------------------
  6.  
  7. #define NOCOMM
  8.  
  9. #include <windows.h>
  10. #include <string.h>
  11.  
  12. #include "vbapi.h"
  13. #include "griglia.h"
  14.  
  15. //---------------------------------------------------------------------------
  16. // RepaintGriglia
  17. //---------------------------------------------------------------------------
  18. VOID _export RepaintGriglia (HWND hWnd) {
  19.  
  20.     HCTL hctlLocal;    
  21.  
  22.     if (hctlLocal = VBGetHwndControl (hWnd)) {
  23.  
  24.         PGRIGLIA lpGrigliaStruct = GRIGLIADEREF(hctlLocal);        
  25.  
  26.         InvalidateRect (lpGrigliaStruct->hWndStatic, NULL, TRUE);        
  27.  
  28.     }
  29. }
  30.  
  31. //---------------------------------------------------------------------------
  32. // GetGrigliaProperty
  33. //---------------------------------------------------------------------------
  34. BOOL _export GetGrigliaProperty (HWND    hWnd,
  35.                                  USHORT nProp,                                 
  36.                                  LPVOID lpData) {                     
  37.  
  38.     HCTL hctlLocal;
  39.  
  40.     if (hctlLocal = VBGetHwndControl (hWnd)) {
  41.     switch (nProp) {
  42.         case    IPROP_GRIGLIA_ROWS:
  43.         case    IPROP_GRIGLIA_COLS:
  44.         case    IPROP_GRIGLIA_FIXEDROWS:
  45.         case    IPROP_GRIGLIA_FIXEDCOLS:
  46.         case    IPROP_GRIGLIA_ROW:
  47.         case    IPROP_GRIGLIA_COL:
  48.         case    IPROP_GRIGLIA_ROWHEIGHT:
  49.         case    IPROP_GRIGLIA_COLWIDTH:
  50.         case    IPROP_GRIGLIA_TOPROW:
  51.         case    IPROP_GRIGLIA_LEFTCOL:
  52.         case    IPROP_GRIGLIA_CURSORROW:
  53.         case    IPROP_GRIGLIA_CURSORCOL:
  54.         case    IPROP_GRIGLIA_TEXT:
  55.         case    IPROP_GRIGLIA_CLIP:
  56.         case    IPROP_GRIGLIA_SELSTARTROW:
  57.         case    IPROP_GRIGLIA_SELENDROW:
  58.         case    IPROP_GRIGLIA_SELSTARTCOL:
  59.         case    IPROP_GRIGLIA_SELENDCOL:
  60.             return (VBGetControlProperty (hctlLocal, nProp, lpData) == 0);    
  61.         }    
  62.     }
  63.     return (FALSE);    
  64. }
  65.  
  66. //---------------------------------------------------------------------------
  67. // SetGrigliaProperty
  68. //---------------------------------------------------------------------------
  69. BOOL _export SetGrigliaProperty (HWND    hWnd,
  70.                                  USHORT nProp,
  71.                                  LONG   lData) {
  72.  
  73.     HCTL hctlLocal;
  74.  
  75.     if (hctlLocal = VBGetHwndControl (hWnd)) {
  76.         switch (nProp) {
  77.             case    IPROP_GRIGLIA_ROWS:
  78.             case    IPROP_GRIGLIA_COLS:
  79.             case    IPROP_GRIGLIA_FIXEDROWS:
  80.             case    IPROP_GRIGLIA_FIXEDCOLS:
  81.             case    IPROP_GRIGLIA_ROW:
  82.             case    IPROP_GRIGLIA_COL:
  83.             case    IPROP_GRIGLIA_ROWHEIGHT:
  84.             case    IPROP_GRIGLIA_COLWIDTH:
  85.             case    IPROP_GRIGLIA_TOPROW:
  86.             case    IPROP_GRIGLIA_LEFTCOL:
  87.             case    IPROP_GRIGLIA_CURSORROW:
  88.             case    IPROP_GRIGLIA_CURSORCOL:
  89.             case    IPROP_GRIGLIA_TEXT:
  90.             case    IPROP_GRIGLIA_CLIP:
  91.             case    IPROP_GRIGLIA_SELSTARTROW:
  92.             case    IPROP_GRIGLIA_SELENDROW:
  93.             case    IPROP_GRIGLIA_SELSTARTCOL:
  94.             case    IPROP_GRIGLIA_SELENDCOL:
  95.                 return (VBSetControlProperty (hctlLocal, nProp, lData) == 0);                
  96.         }        
  97.     }    
  98.     return (FALSE);    
  99. }
  100.  
  101. //---------------------------------------------------------------------------
  102. // PutText
  103. //---------------------------------------------------------------------------
  104. BOOL _export PutText (HWND    hWnd,
  105.                       WORD    wRow,                        
  106.                       WORD    wCol,        
  107.                       LPSTR   lpText) {            
  108.     HCTL hctlLocal;    
  109.  
  110.     if (hctlLocal = VBGetHwndControl (hWnd)) {
  111.  
  112.         PGRIGLIA lpGrigliaStruct = GRIGLIADEREF(hctlLocal);        
  113.  
  114.         if (        
  115.             (lpText) &&            
  116.             (lstrlen (lpText))            
  117.            )       
  118.             return (PutCellText (lpGrigliaStruct,            
  119.                                 wRow,                                 
  120.                                 wCol,                 
  121.                                 lpText));                 
  122.         return (TRUE);
  123.     }
  124.     return (FALSE);    
  125. }
  126.  
  127. //---------------------------------------------------------------------------
  128. // GetText
  129. //---------------------------------------------------------------------------
  130. LPSTR _export GetText (HWND    hWnd,
  131.                        WORD    wRow,                        
  132.                        WORD    wCol) {
  133.     HCTL hctlLocal;    
  134.  
  135.     if (hctlLocal = VBGetHwndControl (hWnd)) {
  136.  
  137.         PGRIGLIA lpGrigliaStruct = GRIGLIADEREF(hctlLocal);        
  138.  
  139.         return (GetCellText (lpGrigliaStruct,        
  140.                              wRow,                             
  141.                              wCol));             
  142.     }
  143.     return (FALSE);    
  144. }
  145.  
  146. //---------------------------------------------------------------------------
  147. // InsertLines
  148. //---------------------------------------------------------------------------
  149. BOOL _export InsertLines (HWND    hWnd,
  150.                           WORD    wRow,
  151.                           WORD    wInsertRows) {
  152.  
  153.     HCTL hctlLocal;    
  154.  
  155.     if (hctlLocal = VBGetHwndControl (hWnd)) {
  156.  
  157.         PGRIGLIA lpGrigliaStruct = GRIGLIADEREF(hctlLocal);        
  158.  
  159.         return (InsertLinesText (lpGrigliaStruct,        
  160.                                   wRow,                                 
  161.                                   wInsertRows));                 
  162.     }
  163.     return (FALSE);    
  164.  
  165. }
  166.  
  167. //---------------------------------------------------------------------------
  168. // DeleteLines
  169. //---------------------------------------------------------------------------
  170. BOOL _export DeleteLines (HWND    hWnd,
  171.                           WORD    wRow,                        
  172.                           WORD    wDeleteRows) {                
  173.  
  174.     HCTL hctlLocal;    
  175.  
  176.     if (hctlLocal = VBGetHwndControl (hWnd)) {
  177.  
  178.         PGRIGLIA lpGrigliaStruct = GRIGLIADEREF(hctlLocal);        
  179.  
  180.         return (DeleteLinesText (lpGrigliaStruct,        
  181.                                  wRow,                             
  182.                                  wDeleteRows));                 
  183.     }
  184.     return (FALSE);    
  185.  
  186. }
  187.  
  188. //---------------------------------------------------------------------------
  189. // FindLine
  190. //---------------------------------------------------------------------------
  191. BOOL _export FindLine (    HWND         hWnd,
  192.                         LPFINDTEXT      lpFind) {
  193.  
  194.     HCTL hctlLocal;
  195.  
  196.     if (hctlLocal = VBGetHwndControl (hWnd)) {
  197.  
  198.         PGRIGLIA lpGrigliaStruct = GRIGLIADEREF(hctlLocal);        
  199.  
  200.         return (FindText (lpGrigliaStruct,        
  201.                           lpFind));      
  202.     }
  203.     return (0xffff);    
  204.  
  205. }
  206.  
  207. //---------------------------------------------------------------------------
  208. // EraseLines
  209. //---------------------------------------------------------------------------
  210. void _export EraseGrid (HWND hWnd) {
  211.  
  212.     HCTL hctlLocal;    
  213.  
  214.     if (hctlLocal = VBGetHwndControl (hWnd)) {
  215.  
  216.         PGRIGLIA lpGrigliaStruct = GRIGLIADEREF(hctlLocal);        
  217.         
  218.         ClearText (lpGrigliaStruct);
  219.     }
  220. }
  221.  
  222. //---------------------------------------------------------------------------
  223. // SelColSize in CHARS
  224. //---------------------------------------------------------------------------
  225. void _export SetColSize (HWND hWnd,
  226.                          UINT nCol,
  227.                          UINT nColSize) {
  228.  
  229.     UINT nColSizeTwips;
  230.  
  231.     if (SetGrigliaProperty (hWnd,
  232.                             IPROP_GRIGLIA_COL,
  233.                             MAKELONG (nCol, 0))) {     
  234.         
  235.         nColSizeTwips = (WORD)VBYPixelsToTwips (nColSize);
  236.         SetGrigliaProperty (hWnd,
  237.                             IPROP_GRIGLIA_COLWIDTH,
  238.                             MAKELONG (nColSizeTwips, 0));
  239.     
  240.     }                        
  241. }
  242.  
  243. //---------------------------------------------------------------------------
  244. // SortLine
  245. //---------------------------------------------------------------------------
  246. BOOL _export SortLine ( HWND            hWnd,
  247.                         LPFINDTEXT      lpFind) {
  248.  
  249.     HCTL hctlLocal;
  250.  
  251.     if (hctlLocal = VBGetHwndControl (hWnd)) {
  252.  
  253.         PGRIGLIA lpGrigliaStruct = GRIGLIADEREF(hctlLocal);        
  254.  
  255.         SortText (lpGrigliaStruct,        
  256.                   lpFind);      
  257.         return (TRUE);
  258.     }
  259.     return (0xffff);    
  260.  
  261. }
  262.  
  263. //---------------------------------------------------------------------------
  264. // InsertCells
  265. //---------------------------------------------------------------------------
  266. void _export InsertCells (HWND    hWnd,
  267.                           WORD    wRow,
  268.                           WORD    wCol,
  269.                           WORD    wInsertCells) {
  270.  
  271.     HCTL hctlLocal;    
  272.  
  273.     if (hctlLocal = VBGetHwndControl (hWnd)) {
  274.  
  275.         PGRIGLIA lpGrigliaStruct = GRIGLIADEREF(hctlLocal);        
  276.  
  277.         InsertCellsText (lpGrigliaStruct,        
  278.                          wRow,                                 
  279.                          wCol,                              
  280.                          wInsertCells);
  281.     }
  282. }
  283.  
  284. //---------------------------------------------------------------------------
  285. // InsertLineBreak
  286. //---------------------------------------------------------------------------
  287. void _export InsertLineBreak (HWND    hWnd,
  288.                               WORD    wRow,
  289.                               WORD    wCol) {
  290.  
  291.     HCTL hctlLocal;    
  292.  
  293.     if (hctlLocal = VBGetHwndControl (hWnd)) {
  294.  
  295.         PGRIGLIA lpGrigliaStruct = GRIGLIADEREF(hctlLocal);        
  296.  
  297.         LineBreakText (lpGrigliaStruct,
  298.                        wRow,
  299.                        wCol);
  300.     }
  301. }
  302.  
  303. //---------------------------------------------------------------------------
  304. // DeleteCells
  305. //---------------------------------------------------------------------------
  306. void _export DeleteCells (HWND    hWnd,
  307.                           WORD    wRow,
  308.                           WORD    wCol,
  309.                           WORD    wDeleteCells) {
  310.  
  311.     HCTL hctlLocal;    
  312.  
  313.     if (hctlLocal = VBGetHwndControl (hWnd)) {
  314.  
  315.         PGRIGLIA lpGrigliaStruct = GRIGLIADEREF(hctlLocal);        
  316.  
  317.         DeleteCellsText (lpGrigliaStruct,
  318.                          wRow,                                 
  319.                          wCol,                              
  320.                          wDeleteCells);
  321.     }
  322. }
  323.  
  324. //---------------------------------------------------------------------------
  325. // DeleteLineBreak
  326. //---------------------------------------------------------------------------
  327. void _export DeleteLineBreak (HWND    hWnd,
  328.                               WORD    wRow,
  329.                               WORD    wCol) {
  330.  
  331.     HCTL hctlLocal;    
  332.  
  333.     if (hctlLocal = VBGetHwndControl (hWnd)) {
  334.  
  335.         PGRIGLIA lpGrigliaStruct = GRIGLIADEREF(hctlLocal);        
  336.  
  337.         RemoveLineBreakText (lpGrigliaStruct,
  338.                              wRow,
  339.                              wCol);
  340.     }
  341. }
  342.  
  343. //---------------------------------------------------------------------------
  344. // MoveWordLeft
  345. //---------------------------------------------------------------------------
  346. void FAR PASCAL _export MoveWordLeft (HWND    hWnd,
  347.                                       WORD    wRow,
  348.                                       WORD    wCol) {
  349.  
  350.     HCTL hctlLocal;    
  351.  
  352.     if (hctlLocal = VBGetHwndControl (hWnd)) {
  353.  
  354.         PGRIGLIA lpGrigliaStruct = GRIGLIADEREF(hctlLocal);        
  355.  
  356.         MoveWordTextLeft (lpGrigliaStruct,
  357.                           wRow,
  358.                           wCol);
  359.     }
  360. }
  361.  
  362. //---------------------------------------------------------------------------
  363. // MoveWordRight
  364. //---------------------------------------------------------------------------
  365. void FAR PASCAL _export MoveWordRight (HWND    hWnd,
  366.                                        WORD    wRow,
  367.                                        WORD    wCol) {
  368.  
  369.     HCTL hctlLocal;    
  370.  
  371.     if (hctlLocal = VBGetHwndControl (hWnd)) {
  372.  
  373.         PGRIGLIA lpGrigliaStruct = GRIGLIADEREF(hctlLocal);        
  374.  
  375.         MoveWordTextRight (lpGrigliaStruct,
  376.                            wRow,
  377.                            wCol);
  378.     }
  379. }
  380.  
  381. //---------------------------------------------------------------------------
  382. // ShiftWordLeft
  383. //---------------------------------------------------------------------------
  384. void FAR PASCAL _export ShiftWordLeft (HWND    hWnd,
  385.                                        WORD    wRow,
  386.                                        WORD    wCol) {
  387.  
  388.     HCTL hctlLocal;    
  389.  
  390.     if (hctlLocal = VBGetHwndControl (hWnd)) {
  391.  
  392.         PGRIGLIA lpGrigliaStruct = GRIGLIADEREF(hctlLocal);        
  393.  
  394.         ShiftWordTextLeft (lpGrigliaStruct,
  395.                            wRow,
  396.                            wCol);
  397.     }
  398. }
  399.  
  400. //---------------------------------------------------------------------------
  401. // ShiftWordRight
  402. //---------------------------------------------------------------------------
  403. void FAR PASCAL _export ShiftWordRight (HWND    hWnd,
  404.                                         WORD    wRow,
  405.                                         WORD    wCol) {
  406.  
  407.     HCTL hctlLocal;    
  408.  
  409.     if (hctlLocal = VBGetHwndControl (hWnd)) {
  410.  
  411.         PGRIGLIA lpGrigliaStruct = GRIGLIADEREF(hctlLocal);        
  412.  
  413.         ShiftWordTextRight (lpGrigliaStruct,
  414.                             wRow,
  415.                             wCol);
  416.     }
  417. }
  418.  
  419. //----------------------------------------------------------------------------
  420. // ADJUST COLUMN SIZES
  421. //----------------------------------------------------------------------------
  422. void FAR PASCAL _export AdjustColumnSizes (HWND hWnd) {
  423.                                     
  424.     static ULONG    lRows;    
  425.     static ULONG    lCols;    
  426.     static ULONG    lFixedRows;    
  427.     static ULONG    lFixedCols;    
  428.     LPSTR  lpText;    
  429.     UINT   n, m, nLength, xChar;                                
  430.     HDC    hDC;
  431.     HCTL   hctlLocal;    
  432.     
  433.     // Get # of rows and cols    
  434.     GetGrigliaProperty (hWnd,    
  435.                         (USHORT)IPROP_GRIGLIA_ROWS,
  436.                         (LPVOID)&lRows);
  437.     GetGrigliaProperty (hWnd,    
  438.                         (USHORT)IPROP_GRIGLIA_COLS,
  439.                         (LPVOID)&lCols);
  440.     GetGrigliaProperty (hWnd,    
  441.                         (USHORT)IPROP_GRIGLIA_FIXEDROWS,
  442.                         (LPVOID)&lFixedRows);
  443.     GetGrigliaProperty (hWnd,    
  444.                         (USHORT)IPROP_GRIGLIA_FIXEDCOLS,
  445.                         (LPVOID)&lFixedCols);
  446.  
  447.     if (hctlLocal = VBGetHwndControl (hWnd)) {
  448.  
  449.         PGRIGLIA lpGrigliaStruct = GRIGLIADEREF(hctlLocal);        
  450.  
  451.         if (hDC = GetDC (hWnd)) {
  452.             static TEXTMETRIC  sTextMetrics;                
  453.             HFONT  hOldFont;
  454.         
  455.             hOldFont = SelectObject (hDC, lpGrigliaStruct->hFont);
  456.             GetTextMetrics (hDC, (LPTEXTMETRIC) &sTextMetrics);            
  457.             xChar = (sTextMetrics.tmAveCharWidth + 
  458.                      sTextMetrics.tmMaxCharWidth) / 2;
  459.             if (hOldFont)
  460.                 SelectObject (hDC, hOldFont);
  461.             ReleaseDC (hWnd, hDC);            
  462.         
  463.             for (n = LOWORD (lFixedCols); n < LOWORD (lCols); ++n) {
  464.                 nLength = 0;
  465.                 if (lpText = GetText (hWnd, 0, n))    
  466.                     nLength = max (nLength, _fstrlen (lpText));       
  467.                 for (m = LOWORD (lFixedRows); m < LOWORD (lRows); ++m) {
  468.                     if (lpText = GetText (hWnd, m, n))
  469.                         nLength = max (nLength, _fstrlen (lpText));   
  470.                 }    
  471.                 SetColSize (hWnd, n, (UINT) (xChar * nLength + 5));
  472.             }          
  473.         }    
  474.     }        
  475.  
  476. //----------------------------------------------------------------------------
  477. // GetBlockSize
  478. //----------------------------------------------------------------------------
  479. UINT FAR PASCAL _export GetBlockSize (HWND hWnd,
  480.                                       WORD wTop,
  481.                                       WORD wLeft,
  482.                                       WORD wBottom,
  483.                                       WORD wRight) {
  484.                                     
  485.     LPSTR  lpText;    
  486.     UINT   n, m, nLength, nTotLength;                                
  487.     
  488.     nTotLength = 0;
  489.     for (n = wLeft; n <= wRight; ++n) {
  490.         nLength = 0;    
  491.         for (m = wTop; m <= wBottom; ++m) {
  492.             if (lpText = GetText (hWnd, m, n)) {
  493.                 nLength = max (nLength, _fstrlen (lpText));
  494.             }
  495.         }          
  496.         nTotLength += nLength;
  497.         if (n != wRight)
  498.             ++nTotLength;    
  499.     }                 
  500.     
  501.     return (nTotLength);       
  502.  
  503. //----------------------------------------------------------------------------
  504. // CJust            
  505. //----------------------------------------------------------------------------
  506. void FAR PASCAL _export CJust (HWND hWnd,
  507.                                WORD wTop,
  508.                                WORD wLeft,
  509.                                WORD wBottom,
  510.                                WORD wRight) {
  511.  
  512.     HCTL hctlLocal;    
  513.  
  514.     if (hctlLocal = VBGetHwndControl (hWnd)) {
  515.  
  516.         PGRIGLIA lpGrigliaStruct = GRIGLIADEREF(hctlLocal);        
  517.  
  518.         Just (lpGrigliaStruct, wTop, wLeft, wBottom, wRight, CENTER_JUST);
  519.     }
  520. }
  521.  
  522. //----------------------------------------------------------------------------
  523. // LJust            
  524. //----------------------------------------------------------------------------
  525. void FAR PASCAL _export LJust (HWND hWnd,
  526.                                WORD wTop,
  527.                                WORD wLeft,
  528.                                WORD wBottom,
  529.                                WORD wRight) {
  530.                                
  531.     HCTL hctlLocal;    
  532.  
  533.     if (hctlLocal = VBGetHwndControl (hWnd)) {
  534.  
  535.         PGRIGLIA lpGrigliaStruct = GRIGLIADEREF(hctlLocal);        
  536.  
  537.         Just (lpGrigliaStruct, wTop, wLeft, wBottom, wRight, LEFT_JUST);
  538.     }
  539. }
  540.  
  541. //----------------------------------------------------------------------------
  542. // RJust            
  543. //----------------------------------------------------------------------------
  544. void FAR PASCAL _export RJust (HWND hWnd,
  545.                                WORD wTop,
  546.                                WORD wLeft,
  547.                                WORD wBottom,
  548.                                WORD wRight) {
  549.                                
  550.     HCTL hctlLocal;    
  551.  
  552.     if (hctlLocal = VBGetHwndControl (hWnd)) {
  553.  
  554.         PGRIGLIA lpGrigliaStruct = GRIGLIADEREF(hctlLocal);        
  555.  
  556.         Just (lpGrigliaStruct, wTop, wLeft, wBottom, wRight, RIGHT_JUST);
  557.     }
  558. }
  559.  
  560. //----------------------------------------------------------------------------
  561. // IsBlockEmpty
  562. //----------------------------------------------------------------------------
  563. BOOL FAR PASCAL _export IsBlockEmpty (HWND hWnd,
  564.                                       WORD wTop,
  565.                                       WORD wLeft,
  566.                                       WORD wBottom,
  567.                                       WORD wRight) {
  568.                                     
  569.     LPSTR  lpText;    
  570.     UINT   n, m;
  571.     
  572.     for (n = wLeft; n <= wRight; ++n) {
  573.         for (m = wTop; m <= wBottom; ++m) {
  574.             if (
  575.                 (lpText = GetText (hWnd, m, n)) &&
  576.                 (_fstrlen (lpText))
  577.                ) {
  578.  
  579.                 // remove initial blanks
  580.                 while (
  581.                        (*lpText)        &&
  582.                        (*lpText == ' ')
  583.                       )
  584.                     ++lpText;
  585.  
  586.                 // anything left ?
  587.                 if (
  588.                     (*lpText) &&
  589.                     (_fstrlen (lpText))
  590.                    )
  591.                     return (FALSE);
  592.             }
  593.         }          
  594.     }                 
  595.     
  596.     return (TRUE);
  597.  
  598. //---------------------------------------------------------------------------
  599. // PutText_Ext
  600. //---------------------------------------------------------------------------
  601. BOOL _export PutText_Ext (HWND        hWnd,
  602.                           WORD        wRow,
  603.                           WORD        wCol,
  604.                           LPEXT_INPUT lpExt,
  605.                           LPSTR       lpText) {
  606.     HCTL hctlLocal;    
  607.  
  608.     if (hctlLocal = VBGetHwndControl (hWnd)) {
  609.  
  610.         PGRIGLIA lpGrigliaStruct = GRIGLIADEREF(hctlLocal);        
  611.  
  612.         if (        
  613.             (lpText) &&            
  614.             (lpExt)  &&
  615.             (_fstrlen (lpText))
  616.            )
  617.             return (PutCellText_Ext (lpGrigliaStruct,
  618.                                      wRow,
  619.                                      wCol,
  620.                                      lpExt,
  621.                                      lpText));
  622.     }
  623.     return (FALSE);    
  624. }
  625.  
  626. //---------------------------------------------------------------------------
  627. // GetText_Ext
  628. //---------------------------------------------------------------------------
  629. LPSTR _export GetText_Ext (HWND        hWnd,
  630.                            WORD        wRow,
  631.                            WORD        wCol,
  632.                            LPEXT_INPUT lpExt) {
  633.     HCTL hctlLocal;    
  634.  
  635.     if (hctlLocal = VBGetHwndControl (hWnd)) {
  636.  
  637.         PGRIGLIA lpGrigliaStruct = GRIGLIADEREF(hctlLocal);        
  638.  
  639.         return (GetCellText_Ext (lpGrigliaStruct,
  640.                                  wRow,
  641.                                  wCol,
  642.                                  lpExt));
  643.     }
  644.     return (FALSE);    
  645. }
  646.